package main

import (
	"fmt"
	"sync"
)

var total int
var wg sync.WaitGroup
var lock sync.Mutex

//互斥锁，读写锁 同步数据 能不用锁就别用锁--性能
//绝大多数的web系统来说 都是读多写少
//有1w个人同时读数据库 A读的时候B能读妈？
//为什么要加锁？一定要加锁，写上和读上面加同一把锁
//并发严重下降，B读了一个数据，不会对C读数据产生影响，一定是读和写之间造成的
//如果这边锁可以做到 读之间不会相互影响 ，写和读之间才会产生影响 那多好 读写锁
func add() {
	defer wg.Done()
	for i := 0; i < 1000; i++ {
		lock.Lock()
		total += 1
		lock.Unlock()
	}

}
func sub() {
	defer wg.Done()
	for i := 0; i < 1000; i++ {
		lock.Lock()
		total -= 1
		lock.Unlock()
	}
}
func main() {
	wg.Add(2)
	go add()
	go sub()
	wg.Wait()
	fmt.Println(total)
}
